package com.example.network.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;

import java.util.Properties;

// 使用@Configuration注解标记这个类为Spring的配置类，用于定义和配置bean
@Configuration
public class EmailConfig {

    // 使用@Value注解从配置文件中注入名为spring.mail.host的属性值到host变量中
    @Value("${spring.mail.host}")
    private String host;  // 声明一个私有的String类型变量host，用于存储SMTP服务器的主机名

    // 使用@Value注解从配置文件中注入名为spring.mail.port的属性值到port变量中
    @Value("${spring.mail.port}")
    private int port;  // 声明一个私有的int类型变量port，用于存储SMTP服务器的端口号

    // 使用@Value注解从配置文件中注入名为spring.mail.username的属性值到username变量中
    @Value("${spring.mail.username}")
    private String username;  // 声明一个私有的String类型变量username，用于存储SMTP登录的用户名

    // 使用@Value注解从配置文件中注入名为spring.mail.password的属性值到password变量中
    @Value("${spring.mail.password}")
    private String password;  // 声明一个私有的String类型变量password，用于存储SMTP登录的密码

    // 使用@Bean注解标记这个方法，表示这个方法将创建一个bean并注册到Spring容器中
    @Bean
    public JavaMailSender JavaMailSender() {  // 定义一个公共方法，返回类型为JavaMailSender，方法名为getJavaMailSender

        JavaMailSenderImpl mailSender = new JavaMailSenderImpl();  // 创建一个JavaMailSenderImpl的实例，这是JavaMailSender接口的实现类

        mailSender.setHost(host);  // 设置SMTP服务器的主机名
        mailSender.setPort(port);  // 设置SMTP服务器的端口号
        mailSender.setUsername(username);  // 设置SMTP登录的用户名
        mailSender.setPassword(password);  // 设置SMTP登录的密码

        Properties props = mailSender.getJavaMailProperties();  // 获取JavaMailSenderImpl实例的JavaMail属性，用于配置SMTP连接的细节

        props.put("mail.transport.protocol", "smtp");  // 设置邮件传输协议为SMTP
        props.put("mail.smtp.auth", "true");  // 设置SMTP连接需要进行身份验证
        props.put("mail.smtp.starttls.enable", "true");  // 启用TLS加密，以提高连接的安全性

        return mailSender;  // 返回配置好的JavaMailSender实例，供Spring容器管理并注入到其他需要邮件发送功能的bean中
    }
}